package cn.topcodes.tcsf.wechat.service;

import cn.topcodes.tcsf.wechat.domain.entity.WechatInvite;

/**
 * 微信邀请服务
 * 通过生成永久/临时二维码发起邀请
 * @author unicorn
 */
public interface WechatInviteService {

    /**
     * 获取临时邀请二维码内容
     * @param mpId    公众号ID
     * @param expiredSeconds    过期秒数
     * @param wechatUserId      邀请人的微信用户ID
     * @param params      自定义参数
     * @return  二维码内容
     */
    String getInviteQrCodeContent(String mpId, long expiredSeconds, Long wechatUserId, String params);

    String getInviteQrCodeContent(long expiredSeconds, Long wechatUserId, String params);

    /**
     * 查找邀请信息
     * @param wechatUserId  邀请人微信用户ID
     * @param params        自定义参数
     * @return  微信邀请信息
     */
    WechatInvite findInvite(Long wechatUserId, String params);

    /**
     * 获取临时邀请
     * @param expiredSeconds    过期秒数
     * @param wechatUserId      微信用户ID
     * @param params            参数
     * @return                  临时邀请信息
     */
    WechatInvite getInvite(String mpId, long expiredSeconds, Long wechatUserId, String params);

    WechatInvite getInvite(long expiredSeconds, Long wechatUserId, String params);

    /**
     * 获取永久邀请二维码内容
     * @param wechatUserId      微信用户ID
     * @return  二维码内容
     */
    String getLimitInviteQrCodeContent(String mpId, Long wechatUserId, String params);

    String getLimitInviteQrCodeContent(Long wechatUserId, String params);

    /**
     * 查找永久邀请信息
     * @param wechatUserId  邀请人微信用户ID
     * @param params        自定义参数
     * @return  永久邀请信息
     */
    WechatInvite findLimitInvite(Long wechatUserId, String params);

    /**
     * 获取永久邀请信息
     * @param wechatUserId  微信用户ID
     * @param params        参数
     * @return              永久邀请信息
     */
    WechatInvite getLimitInvite(String mpId, Long wechatUserId, String params);

    WechatInvite getLimitInvite(Long wechatUserId, String params);

    /**
     * 根据ID查询邀请信息
     * @param id    ID
     * @return      邀请信息
     */
    WechatInvite findOne(Long id);

    /**
     * 通过场景值获取邀请信息
     * @param senceStr  场景值
     * @return  邀请信息
     */
    WechatInvite findBySenceStr(String senceStr);

    /**
     * 删除邀请
     * @param id    邀请ID
     */
    public WechatInvite delete(Long id);
}
